Everything you can imagine is real. – Pablo Picasso
Picasso是用來讀取圖片的第三方套件,在讀取網路圖片時非常好用,只要一行程式碼就能下載並顯示,且支援快取和縮放大小等功能,當然要用在本機圖片也是可以的喔。
同為Square公司的作品,Picasso比前兩天提到的OkHttp和Retrofit簡潔的多,簡潔到我在開頭先加一句畢卡索的名言充字數(它跟今天內容一點關係都沒有),大家可以一掃昨天的陰霾,帶著愉悅的心情跟畢卡索一起顯示圖片。
compile 'com.squareup.picasso:picasso:2.5.2'
因為要讀取網路圖片,所以也要記得在AndroidManifest.xml中加入權限
<uses-permission android:name="android.permission.INTERNET"/>
簡單的放個ImageVIew就好
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<ImageView
android:id="@+id/image_view"
android:layout_width="300dp"
android:layout_height="300dp"/>
</RelativeLayout>
Picasso只要一行程式碼就能下載並顯示圖片,真心不騙
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 連結ImageView
ImageView image_view = (ImageView) findViewById(R.id.image_view);
// 讀取圖片
Picasso.with(this).load("http://i.imgur.com/XY1856Y.png").into(image_view);
}
}
執行結果
Picasso會自動儲存快取,您可以嘗試把裝置的網路關掉再重啟APP,此時雖為離線但圖片仍能顯示
幾個我常用的屬性直接寫在一起介紹,大家依需求選用
Picasso.with(this)
.load("http://i.imgur.com/XY1856Y.png") // 圖片路徑
.placeholder(R.mipmap.ic_launcher) // 圖片讀取完成之前先顯示的佔位圖
.error(R.mipmap.ic_launcher) // 圖片讀取失敗時要顯示的錯誤圖
.resize(200, 200) // 將圖片寬高轉為200*200 pixel
.centerInside() // 與resize搭配使用,將調整過的圖片完整塞進ImageView中
.fit() // 與resize只能擇一使用,將圖片寬高轉為ImageView的大小
.rotate(90) // 將圖片旋轉90度
.into(image_view); // 要顯示圖的View
若要添加Listener可以這樣寫,在into裡面加上Callback
Picasso.with(this)
.load("http://i.imgur.com/XY1856Y.png") // 圖片路徑
.into(image_view, new Callback() {
@Override
public void onSuccess() {
// 圖片讀取完成
Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
}
@Override
public void onError() {
// 圖片讀取失敗
}
});
還有一些進階的功能,可以參考FutureStudio的教學,依照功能分段寫得很仔細。
目前著名的讀圖套件大概有Picasso、UIL、Glide和Fresco四個,Picasso也許不是整體最好的,但我覺得它很好上手,對初學者非常友善,且也不乏進階功能讓我們深入使用。
今天介紹完Square網路套裝的最後一套,總結來說,讀取圖片用Picasso,與API連線用Retrofit,超出以上範圍時就用OkHttp,應能輕鬆處理絕大多數的網路問題哦。